package org.wiming.util;

import lombok.experimental.UtilityClass;
import org.wiming.ListNode;

/**
 * @author : wenchao.long
 * @date : Created in 2021/01/21 10:21 周四
 * @description :
 */
@UtilityClass
public class ListNodeUtil {

    /**
     * 合并两个已经排序的列表
     *
     * @param l1 l1
     * @param l2 l2
     * @return 合并过后的链表
     */
    public ListNode mergeTwoListNodes(ListNode l1, ListNode l2) {
        if (l1 == null) {
            return l2;
        }
        if (l2 == null) {
            return l1;
        }
        if (l1.val < l2.val) {
            l1.next = mergeTwoListNodes(l1.next, l2);
            return l1;
        } else {
            l2.next = mergeTwoListNodes(l1, l2.next);
            return l2;
        }
    }

    /**
     * 两个链表的第一个公共节点(双指针 浪漫相遇)
     *
     * @param l1 链表1
     * @param l2 链表2
     * @return 公共节点
     */
    public ListNode getIntersectionNode(ListNode l1, ListNode l2) {
        if (l1 == null || l2 == null) {
            return null;
        }
        ListNode n1 = l1;
        ListNode n2 = l2;
        while (n1 != n2) {
            n1 = (n1 == null ? l2 : n1.next);
            n2 = (n2 == null ? l1 : n2.next);
        }
        return n1;
    }
}
